package com.freecloud.javabasics.design.decorator;

import com.freecloud.javabasics.design.decorator.passport.LoginForThirdService;
import com.freecloud.javabasics.design.decorator.passport.LoginForThirdServiceImpl;
import com.freecloud.javabasics.design.decorator.passport.LoginServiceImpl;

/**
 * 装饰器
 * 通过对之前适配器的调整进行比较
 * @Author: maomao
 * @Date: 2019-11-19 08:54
 */
public class DecoratorTest {


    public static void main(String[] args) {

        LoginForThirdService thirdService = new LoginForThirdServiceImpl(new LoginServiceImpl());

        thirdService.loginForQQ("openid");
    }

    /**
     *
     * Spring中一般以Decorator或Wrapper命名的类就是装饰器模式
     *
     * 区别
     *
     * ===================================================
     * 装饰器                  |         适配器
     * -----------------------+---------------------------
     * 是一非常特别的适配器模式   |      可以不保留层级关系
     * -----------------------+---------------------------
     * 装饰和被装饰者都实现同一个  |  适配都和被适配者没有必然的层级
     * 接口主要目的是为了扩展，依  |联系通常采用代理或者继承形式进行
     * 旧保留OOP关系            |包装
     * -----------------------+---------------------------
     * 满足is-a的关系           | 满足has-a
     * -----------------------+---------------------------
     * 注重覆盖、扩展            | 注重兼容、转换
     * -----------------------+---------------------------
     *
     */
}
